extends Node
@onready var 相机: Camera2D = $相机
@onready var collision_shape_2d: CollisionShape2D = $相机边界/CollisionShape2D

var 上边界:float
var 下边界:float
var 左边界:float
var 右边界:float


@export var 相机移动速度: float = 300

func _ready() -> void:
	var rect:Rect2 = collision_shape_2d.shape.get_rect()
	
	var 相机视口宽度 = 相机.get_viewport_rect().size.x
	var 相机视口高度 = 相机.get_viewport_rect().size.y
	
	左边界 = collision_shape_2d.to_global(rect.position).x + 相机视口宽度/2
	右边界 = collision_shape_2d.to_global(rect.end).x - 相机视口宽度/2
	
	上边界 = collision_shape_2d.to_global(rect.position).y + 相机视口高度/2
	下边界 = collision_shape_2d.to_global(rect.end).y - 相机视口高度/2


func _process(delta: float) -> void:
	var 鼠标位置 = get_viewport().get_mouse_position()
	var 方向 = 判断是否需要移动相机()
	#print("方向="+ str(方向))
	
	if 方向 != Vector2(0,0):
		var p = 相机.global_position + 方向 * 相机移动速度 * delta
		p.x = clamp(p.x, 左边界, 右边界)
		p.y = clamp(p.y, 上边界, 下边界)
		相机.global_position = p

func 判断是否需要移动相机() -> Vector2:
	var 鼠标位置 = get_viewport().get_mouse_position()
	var 视口大小 = get_viewport().get_visible_rect().size
	
	var 边距 = 30
	var 方向 = Vector2(0, 0)
	var flag = false
	if 鼠标位置.x < 边距:
		flag = true
	elif 鼠标位置.x > 视口大小.x - 边距:
		flag = true
	elif 鼠标位置.y < 边距:
		flag = true
	elif 鼠标位置.y > 视口大小.y - 边距:
		flag = true
		
	if flag:	
		方向 = (鼠标位置 - 相机.global_position ).normalized()
	return 方向
	
